package com.isoftstone.studentregistration.controller;

import cn.hutool.core.io.FileUtil;
import cn.hutool.core.util.IdUtil;
import cn.hutool.core.util.StrUtil;
import com.isoftstone.studentregistration.util.Result;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;

import java.io.File;
import java.io.IOException;

/**
 * 文件上传控制器
 */
@RestController
@RequestMapping("/api")
public class FileController {

    /**
     * 文件上传路径
     */
    @Value("${file.upload.path}")
    private String fileUploadPath;

    /**
     * 文件映射路径
     */
    @Value("${file.upload.fileMapper}")
    private String fileMapper;

    /**
     * 上传文件接口
     *
     * @param file 上传的文件
     * @return 文件访问URL
     * @throws IOException IO异常
     */
    @PostMapping("/upload")
    public Result<?> uploadFile(MultipartFile file) throws IOException {
        // 获取原始文件名
        String fileName = file.getOriginalFilename();
        // 获取文件扩展名
        String fileType = FileUtil.extName(fileName);
        // 获取文件大小
        long fileSize = file.getSize();
        // 创建上传目录
        File uploadParentFile = new File(fileUploadPath);
        if (!uploadParentFile.exists()) {
            uploadParentFile.mkdirs();
        }
        // 生成唯一文件名
        String uuid = IdUtil.fastSimpleUUID();
        String newFileName = uuid + StrUtil.DOT + fileType;
        // 构造文件访问URL
        String url = fileMapper + newFileName;
        // 创建新文件对象
        File newFile = new File(fileUploadPath + newFileName);
        // 保存文件
        file.transferTo(newFile);
        // 返回成功结果和文件URL
        return Result.success(url);
    }
}